Cloud computing aggregates physical and virtual compute, storage, and network resources in the “cloud”, and offers customers ways to utilize the aggregated resources. Typically, cloud providers manage the infrastructure and resources, thus relieving this burden from customers. Cloud computing models allow developers to deploy applications and increasingly shift to the cloud provider the burden of managing the infrastructure and resources for the applications. For example, serverless computing provides a cloud computing execution model which allows developers to build applications and outsource infrastructure and resource allocation responsibilities to the cloud provider. The underlying infrastructure used to run the developer's applications is hosted and managed by the cloud provider.
Serverless computing is often provided as a service for running code for a client. The client uploads the code to the cloud, and the cloud manages the resources for running the code. The cloud executes the code in response to an event configured to trigger the code. The client pays the cloud provider based on the compute time consumed by execution of the code. Serverless computing can thus simplify application deployment for developers. Unfortunately, however, serverless computing frameworks reduce control and visibility. For example, clients have little control over the execution environment, and limited ability to enforce policies. Moreover, serverless computing frameworks can be prone to latency issues, which often depend on the location of the execution environment and the underlying network(s) traversed by the traffic.